import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.arguments.number.ArgumentNumber;
import net.minestom.server.entity.Player;

public class CustomCommand extends Command {
    
    public CustomCommand() {
        super("{{commandName}}");
        
        // String argument
        var nameArg = ArgumentType.String("{{nameArgument}}");
        
        // Integer argument with range
        var countArg = ArgumentType.Integer("{{countArgument}}")
            .min({{minValue}})
            .max({{maxValue}});
        
        // Double argument
        var amountArg = ArgumentType.Double("{{amountArgument}}");
        
        // Word argument (single word)
        var actionArg = ArgumentType.Word("{{actionArgument}}")
            .from("{{option1}}", "{{option2}}", "{{option3}}");
        
        // Player argument (optional)
        var targetArg = ArgumentType.Entity("{{targetArgument}}")
            .onlyPlayers({{playersOnly}});
        
        // First syntax: command <name> <count>
        addSyntax((sender, context) -> {
            String name = context.get(nameArg);
            int count = context.get(countArg);
            
            sender.sendMessage("{{messagePrefix}} " + name + " " + count + " times");
            
            if (sender instanceof Player player) {
                // Player-specific logic
                player.sendMessage("{{playerMessage}}");
            }
        }, nameArg, countArg);
        
        // Second syntax: command <action> [target]
        addSyntax((sender, context) -> {
            String action = context.get(actionArg);
            
            if (context.has(targetArg)) {
                var target = context.get(targetArg);
                sender.sendMessage("{{actionPrefix}} " + action + " on " + target);
            } else {
                sender.sendMessage("{{actionPrefix}} " + action);
            }
        }, actionArg, targetArg.setDefaultValue(() -> null));
        
        // Set conditions
        setCondition((sender, commandString) -> {
            if (!(sender instanceof Player)) {
                sender.sendMessage("{{consoleError}}");
                return false;
            }
            return true;
        });
    }
}

// Register command
MinecraftServer.getCommandManager().register(new CustomCommand());